<%@ page import="java.util.HashMap" %><%--
  Created by IntelliJ IDEA.
  User: yang
  Date: 7/22/20
  Time: 09:10
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>jstl 测试</title>
</head>
<body>

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%-- 核心库 --%>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%-- 国际化标签库 过时 --%>
<%@taglib prefix="sql" uri="http://java.sun.com/jstl/sql" %>
<%-- 操作数据库 过时 --%>
<%@taglib prefix="xml" uri="http://java.sun.com/jstl/xml" %>
<%-- 操作 xml 过时 --%>
<%@taglib prefix="fun" uri="http://java.sun.com/jsp/jstl/functions" %>
<%-- 操作字符串 过时 --%>

<h1>Core 中常用的标签</h1>
<c:catch var="e">
    <h2>catch 捕获异常，封装到 pageContext 中，名字为 e </h2>
    <%=1 / 0%>
</c:catch>
<%
    try {
        out.print(1 / 0);
    } catch (Exception e) {
        pageContext.setAttribute("e1", e);
    }
%>
<p>e: ${e}</p>
<p>e1: ${e1}</p>

<h2>out 输出一个表达式的值 , 如果为空，使用 default 的值</h2>
<p>1 + 1 = <c:out value="1+1" default=""/></p>
<p>1 + 1 = <c:out value="${1+1}" default=""/></p>
<p>e <c:out value="${e}" default=""/></p>
<p>ee <c:out value="${ee}" default="ee"/></p>
<h3> escapeXml 默认是 true，不会解析直接输出，为 false 会解析</h3>
<p><c:out value="<script>alert(\"测试\")</script>" escapeXml="true"/></p>


<h2>set 添加域属性</h2>
<c:set value="aa_value" var="aa"/>
<%-- 默认给 pageContext 添加  --%>
<c:set value="bb_value" var="bb" scope="request"/>
<%-- scope 给指定的域属性添加  --%>
<p>aa ${aa}</p>
<p>pageScope.aa = ${pageScope.get("aa")}</p>
<p>requestScope.aa = ${requestScope.get("bb")}</p>


<h2>redirect 重定向</h2>
<%--<c:redirect url="/" />--%>
<%-- 默认加上项目路径 --%>
<%-- 重定向到 / 根目录 --%>
<%
    //    response.sendRedirect("/");
    // 等价
%>

<h2>remove 移除</h2>
<c:set var="cc" value="cc_value11" scope="page"/>
<c:set var="cc" value="cc_value22" scope="request"/>
<c:set var="cc" value="cc_value33" scope="session"/>
<c:set var="cc" value="cc_value44" scope="application"/>
<c:set var="dd" value="dd_value44" scope="session"/>
<p>移除前 </p>
<p>pageScope.aa = ${pageScope.get("cc")}</p>
<p>requestScope.aa = ${requestScope.get("cc")}</p>
<p>sessionScope.aa = ${sessionScope.get("cc")}</p>
<p>applicationScope.aa = ${applicationScope.get("cc")}</p>
<p>sessionScope.dd = ${sessionScope.get("dd")}</p>
<c:remove var="cc"/>
<%-- 默认移除四大域中所有的 cc 属性 --%>
<c:remove var="dd" scope="session"/>
<%-- scope 指定域 --%>
<p><br>移除后 </p>
<p>pageScope.aa = ${pageScope.get("cc")}</p>
<p>requestScope.aa = ${requestScope.get("cc")}</p>
<p>sessionScope.aa = ${sessionScope.get("cc")}</p>
<p>applicationScope.aa = ${applicationScope.get("cc")}</p>
<p>sessionScope.dd = ${sessionScope.get("dd")}</p>


<h1> if 单分支</h1>
<c:set var="message" value="登陆失败" scope="request"/>
<c:if test="${not empty requestScope.get(\"message\")}">
    <p>message= ${message}</p>
</c:if>


<h1>choose when otherwise 多分支</h1>
<c:set var="age" value="16" scope="request"/>
<c:choose>
    <c:when test="${requestScope.age<18}">
        <p>age= ${requestScope.age} 称呼是未成年</p>
    </c:when>
    <c:when test="${requestScope.age>18}">
        <p>age= ${requestScope.age} 称呼是青年</p>
    </c:when>
    <c:otherwise>
        <p>age= ${requestScope.age} 称呼是 其他</p>
    </c:otherwise>
</c:choose>

<h1> foreach 循环</h1>
<c:forEach var="i" begin="1" end="10" step="1">
    <p>i=${i}</p>
</c:forEach>
<%
    int arr[]={1,3,423,4,2,42,34,12,34};
    pageContext.setAttribute("arr",arr);
%>
<br>
<c:forEach var="n" items="${arr}" varStatus="vs">
    <p>n = ${n} 下标 ${vs.index}</p>
</c:forEach>
<br>

<%
    HashMap<String, Integer> map = new HashMap<>();
    map.put("1",1);
    map.put("2",2);
    map.put("3",3);
    map.put("4",4);
    pageContext.setAttribute("map",map);
%>
<%-- v 接受的是 map 中个一个键值对 对象 (Entry) Entry 有 getKey 和 getValue --%>
<c:forEach items="${map}" var="v">
    <p>v :::: ${v.key}  === ${v.value}</p>
</c:forEach>




<h1> URL 在指定的路径前加上项目路径</h1>
<c:url value="/sql/configuration.sql"/>
<p> 项目名 ${pageContext.request.contextPath} </p>
<p> 项目名 ${theProjectName} </p>
<p><a href="<c:url value='/login' />"> 登陆页面 </a></p>
<p><a href="<c:url value="/sql/configuration.sql"/>"> SQL 文件 </a></p>




</body>
</html>
